package org.posupe.util;

import java.io.Serializable;

public class Endereco implements Serializable {
	private String cep;

	private String logradouro; // @jve:decl-index=0:

	private Integer numero; // @jve:decl-index=0:

	private String complemento; // @jve:decl-index=0:

	private String bairro; // @jve:decl-index=0:

	private String cidade; // @jve:decl-index=0:

	private String estado; // @jve:decl-index=0:

	private String pais;

	public Endereco(String cep, String logradouro, Integer numero,
			String complemento, String bairro, String cidade, String estado,
			String pais) {
		this.cep = cep;
		this.logradouro = logradouro;
		this.numero = numero;
		this.complemento = complemento;
		this.bairro = bairro;
		this.cidade = cidade;
		this.estado = estado;
		this.pais = pais;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public Integer getNumero() {
		return numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}

	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	public String toString() {
		return (this.logradouro == null ? "" : (this.logradouro + ", "))
				+ (this.numero == null || this.numero.intValue() == 0 ? ""
						: (this.numero + ", "))
				+ (this.complemento == null ? "" : (this.complemento + " "))
				+ (this.bairro == null ? "" : (this.bairro + ", "))
				+ (this.cidade == null ? "" : (this.cidade + ", "))
				+ (this.estado == null ? "" : this.estado);
	}

	public boolean match(Endereco endereco) {
		boolean retorno = true;

		if (endereco != null
				/*&& (endereco.getCep() != null
						|| endereco.getLogradouro() != null
						|| endereco.getNumero() != null
						|| endereco.getComplemento() != null
						|| endereco.getBairro() != null
						|| endereco.getCidade() != null
						|| endereco.getEstado() != null || endereco.getPais() != null)
				&& (this.getCep() != null || this.getLogradouro() != null
						|| this.getNumero() != null
						|| this.getComplemento() != null
						|| this.getBairro() != null || this.getCidade() != null
						|| this.getEstado() != null || this.getPais() != null)*/) {

			if (endereco.getCep() != null && retorno) {
				if(this.getCep() != null ){
					retorno = this.cep.contains(endereco.cep);
				}else{
					retorno = false;
				}
			}
			if (endereco.getLogradouro() != null && retorno) {
				if(this.getLogradouro() != null ){
					retorno = this.logradouro.contains(endereco.logradouro);
				}else{
					retorno = false;
				}
			}

			if (endereco.getNumero() != null && retorno) {
				if(this.getNumero() != null){
					retorno = (this.numero.intValue() == endereco.numero.intValue());
				}else{
					retorno = false;
				}
			}

			if (endereco.getComplemento() != null && retorno) {
				if( this.getComplemento() != null){
					retorno = this.complemento.contains(endereco.complemento);
				}else{
					retorno = false;
				}
			}

			if (endereco.getBairro() != null && retorno) {
				if(this.getBairro() != null){
					retorno = this.bairro.contains(endereco.bairro);
				}else{
					retorno = false;
				}
			}
			if (endereco.getCidade() != null && retorno) {
				if(this.getCidade() != null){
					retorno = this.cidade.contains(endereco.cidade);
				}else{
					retorno = false;
				}
			}
			if (endereco.getEstado() != null && retorno) {
				if(this.getEstado() != null){
					retorno = this.estado.contains(endereco.estado);
				}else{
					retorno = false;
				}
			}
			if (endereco.getPais() != null && retorno) {
				if(this.getPais() != null ){
					retorno = this.pais.contains(endereco.pais);
				}else{
					retorno = false;
				}
			}
		} else {
			retorno = false;
		}

		return retorno;
	}
}
